A network processor is a programmable integrated circuit typically provided within a communication system and possessing features making it suitable for dealing with packet data. Applications typically implemented as a software package running on a network processor include:
(i) packet or frame discrimination and forwarding, i.e., the basic operation of a router or switch;
(ii) Quality of Service enforcement—identifying different types or classes of packets and providing preferential treatment for some types or classes of packet at the expense of other types or classes of packet;
(iii) Access Control functions—determining whether a specific packet or stream of packets should be allowed to traverse the piece of network equipment;
(iii) encryption of data streams—built in hardware-based encryption engines allow individual data flows to be encrypted by the processor; and
(iv) TCP offload processing.
The following features of a network processor would be advantageous:
a) a small foot print (in order to reduce its manufacturing cost);
b) the ability to be booted with up-to-date data storage devices or interfaces that are not known at present (that is, easy future expendability);
c) the ability to support booting from different data storage devices and interfaces that are widely used on the market (so that a single network processor can be employed in any of multiple applications, making use of these various storage devices and interfaces);
d) the capability for system recovery and on-site programming of the data storage device; and
e) for its operating mode to be selectable before start-up.
In conventional solutions, the network processor is provided with an external data storage device in the form of an external non-volatile memory (e.g., parallel NOR Flash), which stores the software package (that is, the software the network processor runs to perform its application). After each power-up, the network processor performs a boot operation in which the network processor runs boot software stored in its internal ROM to load the software package from the external data storage device. This makes it possible to obtain advantages (a), (c) and (e) above to a limited degree, but certainly not features (b) and (d).
In fact, features (a) to (e) are to a certain extent mutually contradictory, so obtaining all of the them is not possible at present within a single system, although some proposals have been made to obtain certain of the advantages at the expense of others.
One possibility is using pin-strapping (that is, selecting for at least a certain time the voltages at one or more pins of the integrated circuit) to control how the integrated circuit boots itself from its data storage device. However, since the pin-strapping is only able to modify the behavior of the network processor to a limited degree, this solution still implies that booting is from a known type of data storage device (e.g., a parallel AMD or Intel flash device).
A second possibility is for the network processor to be designed such that it can be controlled (again by pin-strapping) to boot using a UART (RS232) interface without a non-volatile memory being attached. However, the speed of this interface is much too low for the network processor to be booted this way in each power-up. Typically, the size of the software package to be installed is about 1 MB, which would require a few minutes to boot over the UART interface, whereas most applications require a boot-up taking less than 10 seconds. So, the value of the UART interface is principally that it can be used to transfer the booting software to the network processor in untypical situations, such as the first time that the processor is used or on occasions when the software in the external data storage device has become corrupted. The network processor can then transfer the software to its own external data storage device for use in future boot-ups.